google ble 语音spec(voiceverBLERemotecontrol) 您所在的位置:网站首页 谷歌语音助手 中文 google ble 语音spec(voiceverBLERemotecontrol)

google ble 语音spec(voiceverBLERemotecontrol)

2024-03-06 12:39| 来源: 网络整理| 查看: 265

这是对google蓝牙语音标准规范的文档翻译

如有不准确或有疑问的地方欢迎指点。

1 概述 这个文档描述了基于 安卓TV设备 的BLE语音规格的软件需求。 安卓TV遥控器会通过板载麦克风提供一个基于导航和语音输入的D-pad

摘要:广播,配对,电池,DPAD操作,LED操作不在讨论范围内

2 蓝牙 安卓TV遥控器是一种工作在slave模式下的BLE设备。安卓TV设备将会以master的角色下操作设备 2.1 ATV 语音服务 ATV 语音服务应该被Primary Service 安装 ATV 语音服务的UUID 应该被设置为 “ATV VOICE SERVICE” 服务和UUID特性的定义如下: 2.1.1 ATV语音服务的GATT profile 的 UUID 遥控器应该改使这些特性生效且正确广播出去 TypeShort-formUUIDpropertiesATV Voice ServiceATVV_SERVICE_UUIDAB5E0001-5A21-4F05-BC7D-AF01F617B664Write CharacteristicATVV_CHAR_TXAB5E0002-5A21-4F05-BC7D-AF01F617B664writeRead CharacteristicATVV_CHAR_RXAB5E0003-5A21-4F05-BC7D-AF01F617B664NotifyControl CharacteristicATVV_CHAR_CTLAB5E0004-5A21-4F05-BC7D-AF01F617B664Notify 2.1.2 特征对应的行为 ATVV_CHAR_RX 特征是用来读数据的,使用GATT Read 特征值子过程来读音频数据,每个数据包有20字节, ATVV_CHAR_CTL 特征是用来读数据的,使用GATT Read 特征值子过程来返回控制数据,每个控制数据包有20字节。 在一般情况下,第一字节包含必要的信息但这个取决于控制类型,其他的字节也可能会被使用。 这两个特征都可以通过GATT在 客户特征配置描述符(CCC) 上编写特征描述子程序来配置notification。 当完成notification的配置,这个特征在连接的时候能够被notify。当断开连接的时候这个特征需要配置成no notification。

这一段翻译得有点拗口,实际上CCC就是用来确定这个服务能否开始进行数据交互

CCC描述符对于未连接的绑定设备也是保持的。 ATTV_CHAR_TX 特征是由Android TV来写,且能被用来发送信息给遥控器。

上述说的每个数据包有20字节实际上只是短包的情况,如果设备支持长包,也可以更大,甚至一包把一帧数据发完。

3 语音 3.1 录音 Android TV遥控器的录音功能应符合Android 7.1兼容定义的第5.4节的录音要求。 这个设备的音频地 振幅相对于频率应该是相对平滑的特征;例如 增益在±3dB,频率在100 ~ 4000Hz。声音输入灵敏在设置上应该在音源在1000Hz,16bit,2500 RMS的时候能够保持90声能级。PCM 增益等级应该线性跟踪输入SPL在麦克风输入变化至少30dB,范围从-18dB到-12dB SPL。总谐波失真应该小于1%,在输入1KHz,90dB SPL的时候

压缩的音频数据应该占用不超过20%的蓝牙可用带宽

3.2 操作序列 3.2.1 初始化 遥控器设备配对且连接完成之后,Android TV 设备会发送一个命令来获得遥控器的capabilities。这个命令通过ATVV_CHAR_TX特征来发送(数据包包括0x0A的头和其他信息,见get_caps)。收到数据后遥控器应当通过ATVV_CHAR_CTL notification来回复他的capabilities(数据包包括0x0A的头和capabilities 信息,见send_caps)。

获得capabilities的命令能够被发送多次,这个取决于Android TV设备的状态。遥控器则期望尽可能地回复每个命令。

3.2.2 语音搜索 android TV遥控器的麦克风作为语音输入被安装在上面。语音搜索将会被初始化,在用户按下mic按键的时候。遥控器会发送一个按键事件(HID:page 0x0C,键值:0x221)给Android TV设备。它同时也会通过ATVV_CHAR_CTL notification发送一个数据(内容:0x08)给Android TV 当这个Android TV设备准备好开始接收来自遥控器的数据时,它会通过ATVV_CHAR_TX特征发送 Mic_open() 命令(数据内容:0x0C + codec_used字段) 更多信息请看 Timeout 部分的介绍 当Android TV设备侦测到用户已经停止说话(或超时之后(详情看 Timeouts) 或 基于按键)它将会通过ATVV_CHAR_TX 特征发送一个停止录音的命令给遥控器(数据 0x0D) 音频数据将会分别在收到ATVV_CHAR_CTL发来的命令(数据0x04)开始发送,到ATVV_CHAR_CTL发来的数据(数据0x00)接收结束。实际操作上音频数据将会被ATVV_CHAR_RX这个特征以每包20字节notification。详情看 Audio_Frame 部分 定期的,一个 AUDIO_SYNC 消息也会同当前音频帧被发送,以此来保持发送端(遥控器)和接收端(Android TV设备)之间的同步。这个消息会通过ATVV_CHAR_CTL(数据0x0A + frame_number) 3.2.3 DPAD Select key(OK button) 屏幕上 麦克风的图标被点击时能够触发麦克风请求。为了完整地支持这个事件,它必须去监视按键按下和准备麦克风的请求。 当屏幕上的麦克风图标被OK键点击时,用户会初始化语音搜索。遥控器会发送一个按键事件(HID:page 0x0C,command:0x41)给Android TV设备。同时它也会通过ATVV_CHAR_CTL notification(数据:0x07)给Android TV

当用户每次按下OK按键,这个notification 都会被发送。

4 序列图 4.1 初始化

在这里插入图片描述

4.2 语音搜索

在这里插入图片描述

4.3 超时

在这里插入图片描述

4.3.1 超时情况1 Android TV 设备超时 持续时间:T1(tbd)毫秒 [理想情况下 1000ms,打开suggestions] 定时器开始: Android TV device:当 Mic_open() 被发送 定时器终止: 当收到从遥控器端发送的 Audio_start() 或 Mic_open_error(见下方 error_code) 定时器完成: 发送 Mic_close() 给遥控器 4.3.2 超时情况2

这种一般属于正常的超时终止

Android TV 设备和遥控器设备 Duration:T3(tbd)毫秒[理想情况下 7000ms,大概suggestions] 定时器开始: 遥控器:当 Audio_start() 完成发送 Android TV:当接收到Audio_start() 定时器终止: 遥控器:当收到 Mic_close() Android TV:当 Mic_close()被发送或收到遥控器发来的 Audio_end() 定时器完成: 遥控器:发送 Audio_end() 给Android TV Android TV:发送 Mic_close() 给遥控器。

这里的定时器终止应该指的是timeout定时器关闭。定时器完成指的是完成了整个定时事件,虽然这时候定时器已经没有在跑了。

5 音频流格式 每个sample里的数据的熟虑是 [16Khz]8Khz,16bit。所以[256kbps]128kbps的原始数据需要被以4:1的压缩率压缩到[64kbps]32kbps(ADPCM) 5.1 在遥控器上的编码 遥控器上的固件需要包含能将用IMA/DVI ADPCM编码的原始音频数据以4:1的压缩比压缩的软件。 5.2 音频帧 音频帧是134 bytes 包含128 bytes的编码音频数据和6 bytes的头。每帧数据能够让音频持续[16ms]32ms

8Khz/16bit: (128 * 8) / (4 * 8k) = 32ms

16Khz/16bit: (128 * 8) / (4 * 16k) = 16ms

在这里插入图片描述 在这里插入图片描述

当数据在空中传输时,一帧音频数据被拆解成20 byte的数据包发送,这意味着每一帧音频数据至少需要被发送7次。 6 特征值和命令 特征方向与消息命令与数据CHAR_TXATV—>RemoteATV_GET_CAPS0x0A,get_caps(4)ATV_MIC_OPEN0x0C,codec_used(2)ATV_MIC_CLOSE0x0DCHAR_RXRemote—>ATV{Data,no message}ATVAUDIO_STOP0x00AUDIO_START0x04DPAD_SELECT0x07START_SEARCH0x08AUDIO_SYNC0x0A,frame_num(2)GET_CAPS_RESP0x0B,get_caps_resp(8)MIC_OPEN_ERROR0x0C,error_code(2) 7 Capabilities 字段含义get_caps(4)见下方:version(2),codec_supported(2)get_caps_resp(8)见下方:version(2),codecs_supported(2),bytes/frame(2),bytes/characteristic(2)version(2)见下方:major(1),minor(1)major(1)0x00:draft version0x01:version 10x02:version 2minor(1)0x01:version 0.10x02:version 0.2本规格书对应的版本是:Major:0x00,Minor:0x04codecs_supported(2)0x0001:ADPCM,8khz/16bit0x0003:ADPCM,8khz/16bit & 16khz/16bit0x0005:Opus and ADPCM 8khz/16bit0x0007:Opus and ADPCM 8khz/16bit & 16khz/16bitcodec_used(2)0x0001:ADPCM,8khz/16bit0x0002:ADPCM 16khz/16bit0x0004:Opusbytes/frame(2)0x0086(134byte,默认)Note:这个参数不是随便定义的。是有一个确切的值的bytes/characteristic(2)0x0014(20byte,default这个其实就是定义每次发送数据的时候发送多少字节frame_num(2)0x0001:exact frame number,实际上就是第几帧 8 错误码 字段含义error_code(2)0x0f01:invalid codec


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有